package com.mh.expression;

import com.mh.entity.LoginUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

import java.util.List;

//自定义权限校验方法
@Component("myEx")
public class MyExpression {


    public boolean myHasAuthority(String authority) {
        //获取当前用户的权限
        /** Authentication 对象,它包含了当前用户的身份信息和权限信息
         *  MyJWtAuthFilter中往SecurityContextHolder存储了Authentication
         */
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        /** auth.getPrincipal() 返回当前用户的主体信息(通常是用户名或用户对象)
         *  返回的是UserDetails类型,在此我们用我们自定义的它的实现类LoginUser接收
         */
        LoginUser lu = (LoginUser) auth.getPrincipal();
        //LoginUser 对象中获取用户的权限列表 --> LoginUser里有SysUser对象+permissions
        List<String> permissions = lu.getPermissions();

        //检查权限列表中是否包含指定的权限(authority), 包含返回true,否则false
        //判断 "传进来的权限authority" 是否与 "LoginUser中get的permissions" 一致
        return permissions.contains(authority);
    }
}
